package com.yunsc.order.sevice;

import com.baomidou.mybatisplus.extension.service.IService;
import com.yunsc.common.utils.PageResult;
import com.yunsc.order.dto.OrderCommentDTO;
import com.yunsc.order.dto.OrderDeliveryDTO;
import com.yunsc.order.dto.QueryOrderDTO;
import com.yunsc.order.entity.YunscOrderEntity;
import com.yunsc.order.vo.*;

import java.util.List;

/**
 * 订单记录表
 *
 * @author adan
 * @email 2028038953@qq.com
 * @date 2024-04-22 11:35:51
 */
public interface YunscOrderService extends IService<YunscOrderEntity> {

    /**
     * 查询订单列表
     * @param params 查询参数
     * @param storeId 当前门店ID
     * @return 订单列表
     */
    PageResult<OrderDetailVO> queryOrderList(QueryOrderDTO params, Integer storeId);

    /**
     * 根据订单ID查询订单详情
     * @param orderId 订单ID
     * @return 订单详情
     */
    OrderDetailVO queryOrderDetailByOrderId(Integer orderId);

    /**
     * 订单发货
     *
     * @param orderDeliveryDTO 订单发货参数
     */
    void orderDelivery(OrderDeliveryDTO orderDeliveryDTO);

    /**
     * 更新订单备注
     * @param param 订单参数
     */
    void updateRemark(OrderDeliveryDTO param);

    /**
     * 根据订单ID删除订单
     * @param orderId 订单ID
     */
    void deleteOrderById(Integer orderId);

    List<OrderGoodsVO> queryOrderGoods(Integer orderId);


    /**
     * 查询用户待办订单数量
     * @param userId 用户ID
     * @return
     */
    TodoCountsVO queryUserTodoCounts(Integer userId);



    /**
     * 保存订单到数据库
     *
     * @param userId   用户ID
     * @param remark   订单备注
     * @param order    订单信息
     * @param platform
     * @return 订单实体
     */
    YunscOrderEntity saveOrderDb(Integer userId, String remark, CheckOrderVO order, String platform);

    /**
     * 查询用户订单列表
     * @param param 查询参数
     * @param userId 当前用户ID
     * @return 订单列表
     */
    PageResult<OrderDetailVO> queryUserOrderList(QueryOrderDTO param, Integer userId);

    /**
     * 取消订单
     * @param orderId 订单ID
     * @param userId 用户ID
     */
    void cancelOrder(Integer orderId, Integer userId);

    /**
     * 确认收货
     * @param orderId 订单ID
     * @param userId 当前用户ID
     */
    void receiptOrder(int orderId, Integer userId);

    /**
     * 提交订单评论
     * @param params 评论参数
     * @param userId 当前用户ID
     */
    void submitOrderComment(OrderCommentDTO params, Integer userId);

    /**
     * 查询订单概览
     * @param storeId 当前门店ID
     * @return 订单概览
     */
    OrderOverviewVO queryOrderOverview(Integer storeId);

    /**
     * 获取近七日交易走势
     * @param currentStoreId 当前门店ID
     * @return 订单交易趋势
     */
    TradeTrendVO queryOrderTradeTrend(Integer currentStoreId);

    /**
     * 查询店铺消费数据
     * @param currentStoreId 当前门店ID
     * @return 店铺消费数据
     */
    ConsumptionVO queryConsumption(Integer currentStoreId);

    /**
     * 订单状态统计
     * @param currentStoreId 当前门店ID
     * @return 订单信息统计
     */
    OrderPendingVO queryOrderPending(Integer currentStoreId);

    /**
     * 数据概况
     * @param storeId 当前门店ID
     * @return 数据概况
     */
    OverviewVO queryOverview(Integer storeId);

    /**
     * 查询用户消费排行
     * @param storeId 当前门店ID
     * @return 用户消费排行
     */
    List<UserExpendRankingVO> queryUserExpendRanking(Integer storeId);

    /**
     * 查询数据概况
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @return 数据概况
     */
    OverviewVO queryOverviewByDate(String startDate, String endDate, Integer storeId);
}

